package chatBot.common;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 通用结果类，用于封装API接口的返回结果。
 *
 * @param <T> 返回数据的类型
 *
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {

    // 响应状态码，默认值为200，表示成功
    private Integer code = 200;
    // 响应消息，默认值为"success"
    private String msg = "success";
    // 响应数据，泛型类型
    private T data;

    /**
     * 返回不带数据的成功结果。
     *
     * @return Result<Object> 包含状态码200和消息"success"的结果对象
     */
    public static <T>Result<T> success() {
        return new Result<>(200, "success", null);
    }

    /**
     * 返回带数据的成功结果。
     *
     * @param data 响应数据
     * @param <T>  响应数据的类型
     * @return Result<T> 包含状态码200、消息"success"以及数据的结果对象
     */
    public static <T> Result<T> success(T data) {
        return new Result<>(200, "success", data);
    }


    /**
     * 返回带自定义消息的失败结果。
     *
     * @param msg 自定义失败消息
     * @return Result<Object> 包含状态码404和自定义消息的结果对象
     */
    public static <T>Result<T> fail(String msg) {
        return new Result<>(404, msg, null);
    }

    /**
     * 返回带自定义状态码和消息的失败结果。
     *
     * @param code 自定义状态码
     * @param msg  自定义失败消息
     * @return Result<Object> 包含自定义状态码和消息的结果对象
     */
    public static <T>Result<T> fail(Integer code, String msg) {
        return new Result<>(code, msg, null);
    }

}
